#pragma once
#include "data.hpp"
#include<unistd.h>
extern  cloud::DataManger * _data;
namespace cloud{

    class HotManger{
        public:
        HotManger(){
            Config*config=Config::GetInstance();
            _back_dir=config->GetBackDir();
            _pack_dir=config->GetPackDir();
            _pack_suffix=config->GetPackFileSuffix();
            _hot_time=config->GetHotTime();
            FileUtil temp1(_back_dir);
            FileUtil temp2(_pack_dir);
            temp1.CreateDirectory();
            temp2.CreateDirectory();
        }
        bool RunModule(){

          while(true)
          {
            //1.遍历备份目录，获取文件名
              FileUtil fu(_back_dir);
              std::vector<std::string>arry;
              fu.ScanDirectory(&arry);
            //2.遍历判断文件是否为非热点文件
            for(auto &a:arry)
            {
              if(HotJudge(a)==false)
              {
                continue;
              }
              //获取文件的备份信息
              BackupInfo bi;
              if(_data->GetOneByRealPath(a,&bi)==false)
              { 
                //现在有一个文件存在，但是没有备份信息
                bi.NewBackupInfo(a);//设置一个新的备份信息
                      
              }
               //3.对非热点文件进行压缩处理
               FileUtil temp(a);
               temp.Compress(bi._packpath);
              //4.删除源文件，修改备份消息
               temp.Remove();
               bi._packflag=true;
               _data->Update(bi);
            }
            usleep(1000);//避免空目录循环遍历，消耗cpu资源
          }
           
            return true;
        }
        
        private:
        bool HotJudge(const std::string&filename){
            FileUtil fu(filename);
            time_t last_atime=fu.LastATime();
            time_t cur_time=time(nullptr);
            //超过热点时间间隔就是非热点文件
            if(cur_time-last_atime>_hot_time)
            {
                return true;
            }
            return false;
        }
        private:
        std::string _back_dir;
        std::string _pack_dir;
        std::string _pack_suffix;
        int _hot_time;

    };
}